/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package pe.edu.upc.sigu.web;

import java.awt.event.ActionEvent;
import java.io.Serializable;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.RequestScoped;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.faces.event.ValueChangeEvent;
import javax.faces.model.SelectItem;
import javax.servlet.http.HttpSession;
import pe.edu.upc.sigu.entities.AlumnoCursoSeccion;
import pe.edu.upc.sigu.entities.Alumnos;
import pe.edu.upc.sigu.entities.Ciclo;
import pe.edu.upc.sigu.entities.Cursos;
import pe.edu.upc.sigu.entities.NotasAlumnoCurso;
import pe.edu.upc.sigu.entities.Periodos;
import pe.edu.upc.sigu.negocio.service.NotasServive;
import pe.edu.upc.sigu.negocio.service.PeriodoService;
import pe.edu.upc.sigu.util.Constant;
import pe.edu.upc.sigu.util.Util;

/**
 *
 * @author natho_000
 */
@ManagedBean(name = "consultaNotasBean")
@SessionScoped
public class ConsultaNotasBean implements Serializable {

    /**
     * Creates a new instance of ConsultaBean
     */
    public ConsultaNotasBean() {
    }
    @ManagedProperty(value = "#{periodoService}")
    private PeriodoService periodoService;
    @ManagedProperty(value = "#{notasServive}")
    private NotasServive notasServive;
    private String periodo;
    //private Alumnos alumno = new Alumnos(1, "2007100080");
    private Alumnos alumno;
    //maps
    private Map periodosMap;
    private Map ciclosMap;
    private Map cursosMap;
    private String periodoSelected;
    private String cursoSelected;
    private String cicloSelected;
    private String desAlumno;
    private List<AlumnoCursoSeccion> notasCursosList;

    @PostConstruct
    public void init() {
        System.out.println(" POstconstruct");
        HttpSession session = (HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(false);
        Alumnos _alumno = (Alumnos) session.getAttribute("alumno");
        setAlumno(_alumno);
        
        periodosMap = new LinkedHashMap<String, String>();
        setCiclosMap(new LinkedHashMap<String, String>());
        List<Periodos> periodosList = getNotasServive().getPeriodosList(getAlumno());
        for (Periodos periodo : periodosList) {
            periodosMap.put(periodo.getDescripcion(), periodo.getPeriodosPK().getPeriodo());
        }

        /*List<Ciclo> ciclosList = getNotasServive().getCiclosList(getAlumno());
        for (Ciclo ciclo : ciclosList) {
            getCiclosMap().put(ciclo.getDescripcion(), ciclo.getCiclo());
        }*/


        
        System.out.println(" _alumno logueado : " + _alumno.getAlumnosPK().getAlumno());
        System.out.println(" _alumno app : " + _alumno.getPersonas().getApellidoPaterno());
        setDesAlumno(_alumno.getAlumnosPK().getAlumno() + " - " + _alumno.getPersonas().getApellidoPaterno() + " - " + _alumno.getPersonas().getApellidoMaterno() + " - " + _alumno.getPersonas().getNombres());
        // obteniendo  periodo por defecto
        Periodos periodoDefault = periodoService.getPeriodoDefault();
        System.out.println(" El periodo activo : " + periodoDefault.getDescripcion());
        //detalle de cursos por defecto
        List<AlumnoCursoSeccion> _notasCursosList2 = notasServive.getNotasCurosList2(periodoDefault, getAlumno(), null);
        //Combo de cursos por defecto
        List<Cursos> cursosList = notasServive.getCurosList(periodoDefault, getAlumno());
        cursosMap = new LinkedHashMap<String, String>();
        for (Cursos curso : cursosList) {
            cursosMap.put(curso.getDescripcion(), curso.getCurso());
        }
        setNotasCursosList(_notasCursosList2);

    }

    public String getPeriodo() {
        return periodo;
    }

    public void setPeriodo(String periodo) {
        this.periodo = periodo;
    }

    public void cargarCursos(ValueChangeEvent e) {
        System.out.println(e.getNewValue().toString());
        this.periodoSelected = e.getNewValue().toString();
        cursosMap = new LinkedHashMap<String, String>();
        List<Cursos> cursosList = notasServive.getCurosList(new Periodos(1, e.getNewValue().toString()), getAlumno());
        for (Cursos curso : cursosList) {
            cursosMap.put(curso.getDescripcion(), curso.getCurso());
        }
    }

    public void countryLocaleCodeChanged(ValueChangeEvent e) {
    }

    public PeriodoService getPeriodoService() {
        return periodoService;
    }

    public void setPeriodoService(PeriodoService periodoService) {
        this.periodoService = periodoService;
    }

    /**
     * @return the notasServive
     */
    public NotasServive getNotasServive() {
        return notasServive;
    }

    /**
     * @param notasServive the notasServive to set
     */
    public void setNotasServive(NotasServive notasServive) {
        this.notasServive = notasServive;
    }

    /**
     * @return the cicloSelected
     */
    public String getCicloSelected() {
        return cicloSelected;
    }

    /**
     * @param cicloSelected the cicloSelected to set
     */
    public void setCicloSelected(String cicloSelected) {
        this.cicloSelected = cicloSelected;
    }

    public void consultar() {
        System.out.println(" Enviarrrr");

    }

    public void printIt(ActionEvent event) {

        System.out.println(" ejecutando código !!!!!!");
        //Get submit button id

    }

    public String outcome() {
        System.out.println(" enviar " + alumno.getAlumnosPK().getAlumno() + " - " + periodoSelected+" - cursoSelected :"+cursoSelected);
        Cursos _curso=null;
        if(!cursoSelected.equals("0")){
            _curso = new Cursos(cursoSelected);
        }

        List<AlumnoCursoSeccion> _notasCursosList2 = notasServive.getNotasCurosList2(new Periodos(Constant.INSTITUCION, periodoSelected), alumno, _curso);
        setNotasCursosList(_notasCursosList2);
        return "ConsultaNotas";
    }

    public String  cerrarSession(){
        HttpSession session = (HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(false);
        session.invalidate();
        return "login";
    }



    /**
     * @return the periodoSelectd
     */
    public String getPeriodoSelected() {
        return periodoSelected;
    }

    /**
     * @param periodoSelectd the periodoSelectd to set
     */
    public void setPeriodoSelected(String periodoSelected) {
        this.periodoSelected = periodoSelected;
    }

    /**
     * @return the periodosMap
     */
    public Map getPeriodosMap() {
        return periodosMap;
    }

    /**
     * @param periodosMap the periodosMap to set
     */
    public void setPeriodosMap(Map periodosMap) {
        this.periodosMap = periodosMap;
    }

    /**
     * @return the ciclosMap
     */
    public Map getCiclosMap() {
        return ciclosMap;
    }

    /**
     * @param ciclosMap the ciclosMap to set
     */
    public void setCiclosMap(Map ciclosMap) {
        this.ciclosMap = ciclosMap;
    }

    /**
     * @return the cursosMap
     */
    public Map getCursosMap() {
        return cursosMap;
    }

    /**
     * @param cursosMap the cursosMap to set
     */
    public void setCursosMap(Map cursosMap) {
        this.cursosMap = cursosMap;
    }

    /**
     * @return the cursoSelected
     */
    public String getCursoSelected() {
        return cursoSelected;
    }

    /**
     * @param cursoSelected the cursoSelected to set
     */
    public void setCursoSelected(String cursoSelected) {
        this.cursoSelected = cursoSelected;

    }

    /**
     * @return the desAlumno
     */
    public String getDesAlumno() {
        return desAlumno;
    }

    /**
     * @param desAlumno the desAlumno to set
     */
    public void setDesAlumno(String desAlumno) {
        this.desAlumno = desAlumno;
    }

    /**
     * @return the alumno
     */
    public Alumnos getAlumno() {
        return alumno;
    }

    /**
     * @param alumno the alumno to set
     */
    public void setAlumno(Alumnos alumno) {
        this.alumno = alumno;
    }

    /**
     * @return the notasCursosList
     */
    public List<AlumnoCursoSeccion> getNotasCursosList() {
        return notasCursosList;
    }

    /**
     * @param notasCursosList the notasCursosList to set
     */
    public void setNotasCursosList(List<AlumnoCursoSeccion> notasCursosList) {
        this.notasCursosList = notasCursosList;
    }
}
